package com.zk.algo;

import java.util.*;

/**
 * 数串
 *
 * 牛客网:https://www.nowcoder.com/practice/a6a656249f404eb498d16b2f8eaa2c60?tpId=85&&tqId=29898&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking
 * 设有n个正整数，将他们连接成一排，组成一个最大的多位整数
 *
 * (1) Comparator 方法的 compare(T o1, T o2) 不太熟悉方法签名
 * (2) 两个索引退出循环，忘记判断两个索引是否都到 length 长度
 * (3) 不通过的 (最终通过率 40%)
 * 测试用例:
 * 37
 * 93 672 946 153 947 82 522 772 725 413 936 649 399 123 821 93 29 860 572 344 608 590 554 210 115 307 313 535 636 184 291 66 178 379 204 523 758
 *
 * 以为 936 比 93 大，所以 93693 就比 93936 更大
 * (4) 两个字符串比较对应的数值大小，直接 s1.compareTo(s2) 就可以，不用麻烦的转为 char 数组自己进行比较了
 */
public class ShuChuan {

    /**
     *
     * 947 946 93 93 936 860 82 821 772 758 725 672 66 649 636 608 590 572 554 535 523 522 413 399 379 344 313 307 29 291 210 204 184 178 153 123 115
     * 947 946 936 93 93 860 821 82 772 758 725 672 66 649 636 608 590 572 554 535 523 522 413 399 379 344 313 307 291 29 210 204 184 178 153 123 115
     *
     * @param args
     */
    public static void main(String...args) {

        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();
        List<Integer> numList = new ArrayList<>(count);

        while (count-- > 0) {

            int num = scanner.nextInt();
            numList.add(num);

        }

        sortCorrect(numList);
        Collections.reverse(numList);
        output(numList);

    }

    private static void output(List<Integer> numList) {

        for (Integer num:numList) {
            System.out.print(num);
        }

        System.out.println();

    }

    /**
     * 正确解法
     * https://www.nowcoder.com/questionTerminal/a6a656249f404eb498d16b2f8eaa2c60
     *
     * @param numList
     */
    private static void sortCorrect(List<Integer> numList) {
        numList.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {

                String o1Str = String.valueOf(o1);
                String o2Str = String.valueOf(o2);

                return (o1Str + o2Str).compareTo(o2Str + o1Str);
            }
        });
    }

    /**
     * 错误解法
     *
     * @param numList
     */
    private static void sort(List<Integer> numList) {
        Collections.sort(numList, new Comparator<Integer>() {

            @Override
            public int compare(Integer num1, Integer num2) {

                char[] num1CharArray = String.valueOf(num1).toCharArray();
                char[] num2CharArray = String.valueOf(num2).toCharArray();

                int index1 = 0;
                int index2 = 0;

                while (index1 < num1CharArray.length &&
                        index2 < num2CharArray.length) {

                    char c1 = num1CharArray[index1];
                    char c2 = num2CharArray[index2];

                    if (c1 < c2) {
                        return -1;
                    } else if (c1 > c2) {
                        return 1;
                    }

                    index1++;
                    index2++;

                }

                // 忘记这个地方
                if (index1 < num1CharArray.length) {
                    return 1;
                } else if (index2 < num2CharArray.length) {
                    return -1;
                }

                return 0;
            }

        });
    }

}
